Ubuntu 18.04를 기준으로 작성된 과거의 Nginx 역방향 프록시 예제입니다. 기존 웹 서버 제거와 TLS 설정이 포함되어 있으므로 현재 환경을 확인한 뒤 사용하세요. 아래 설정은 당시 원문을 보존한 것이며 최신 보안 설정을 뜻하지 않습니다.

Nginx 설치

원문은 Nginx를 설치하고 Apache2를 제거하는 순서로 설명합니다. Apache에서 다른 서비스를 제공 중이라면 그대로 실행하면 안 됩니다.

sudo apt-get install nginx
sudo apt-get remove apache2

설정 파일

cd /etc/nginx/conf.d
vim default.conf

Trilium 주소와 도메인 및 인증서 경로를 환경에 맞게 지정하세요. 원문에 포함된 TLS 1.0과 1.1은 오래된 프로토콜입니다.

# Trilium 실행 주소
upstream trilium {
  zone trilium 64k;
  server 127.0.0.1:8080; # 실제 호스트와 포트로 변경
  keepalive 2;
}

# 프록시와 HTTPS 설정
server {
    listen 443 ssl;
    server_name trilium.example.net; # 프로토콜을 제외한 도메인으로 변경
    ssl_certificate /etc/ssl/note/example.crt; # 인증서 파일 경로로 변경
    ssl_certificate_key /etc/ssl/note/example.net.key; # 개인 키 파일 경로로 변경
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    access_log /var/log/nginx/access.log; # 접근 로그 저장 경로 확인

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://trilium;
        proxy_read_timeout 90;
    }
}

# HTTP 요청을 HTTPS로 전환
server {
    listen 80;
    server_name trilium.example.net; # 실제 도메인으로 변경
    return 301 https://$server_name$request_uri;
}

별도 경로에서 제공하기

여러 인스턴스를 다른 경로로 제공하려면 location을 조정할 수 있습니다. proxy_pass 끝에 슬래시가 없다면 location 경로의 끝에도 슬래시를 붙이지 않습니다. proxy_cookie_path도 같은 경로로 지정하면 여러 인스턴스에 각각 로그인 상태를 유지할 수 있습니다.

    location /trilium/instance-one {
        rewrite /trilium/instance-one/(.*) /$1  break;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://trilium;
        proxy_cookie_path / /trilium/instance-one;
        proxy_read_timeout 90;
    }

마지막 예제의 쿠키 경로 지시문에는 원문에서 빠진 세미콜론을 보완했습니다. 실제 설정을 적용하기 전에 Nginx 구문 검사가 필요합니다.